Semiconductor memory devices are memory devices implemented using a semiconductor such as silicon (Si), germanium (Ge), gallium arsenide (GaAs), and indium phosphide (InP). In general, semiconductor memory devices are classified into volatile memory devices and nonvolatile memory devices.
Volatile memory devices lose their stored data when their power supplies are interrupted. Volatile memory devices may include, for example, a static RAM (SRAM), a dynamic RAM (DRAM), and a synchronous DRAM (SDRAM). Nonvolatile memory devices are memory devices that retain their stored data even when their power supplies are interrupted. Nonvolatile memory devices may include, for example, a read only memory (ROM), a programmable ROM (PROM), an electrically programmable ROM (EPROM), an electrically erasable and programmable ROM (EEPROM), a flash memory device, a phase change RAM (PRAM), a magnetic RAM (MRAM), a resistive RAM (ReRAM), and a ferroelectric RAM (FRAM).
Since nonvolatile memory devices retain their stored data even when their power supplies are interrupted, nonvolatile memory devices may be used as a mass storage medium. A flash memory stores data by changing threshold voltages of memory cells. With the recent advance in semiconductor technology, a multi-level cell (MLC) adapted to store at least two bits of data in a single memory cell has been widely used. However, since an MLC is adapted to a plurality of bits in a single memory cell, the MLC has less read margin. As sizes of memory cells are decreasing with the recent advance in semiconductor integration technology, data stored in MLCs may be lost due to external factors or interference between adjacent memory cells. Accordingly, various program schemes for programming MLCs have been developed to address the above disadvantages.